// 在浏览器输入http://localhost:8080/时，会返回404，原因是程序识别出HTTP请求的不是文件，而是目录。
// 请修改file_server.js，如果遇到请求的路径是目录，则自动在目录下依次搜索index.html、default.html，如果找到了，就返回HTML文件的内容。

// 导入模块
import fs from "fs";
import http from "http";
import Path from "path";

// 创建读取文件函数（同步）
function readFileFn(filePath) {
  // 返回文本内容
  return fs.readFileSync(filePath, "utf8");
}

// 创建函数
function fn(req, res) {
  // 当前请求的路径
  let path = `.${req.url}`;
  path = path.replace("./favicon.ico", "");

  fs.stat(path, (err, stats) => {
    if (err) {
      // 文件或文件夹不存在
      // 返回 404
      res.writeHead(404);
      res.end("404");
    } else {
      if (stats.isDirectory()) {
        // 文件夹存在
        // 文件名
        const fileName1 = "index.html";
        const fileName2 = "default.html";
        // 文件路径（两个默认路径）
        const filePath1 = Path.join(path, fileName1);
        const filePath2 = Path.join(path, fileName2);

        // 查询当前目录是否有 index.html 文件
        if (fs.existsSync(filePath1)) {
          // 调用读取函数拿到文本
          const content = readFileFn(filePath1);
          // 返回给页面
          res.end(content);
          // 退出函数
          return;
        } // 查询当前目录是否有 default.html 文件
        else if (fs.existsSync(filePath2)) {
          // 调用读取函数拿到文本
          const content = readFileFn(filePath2);
          // 返回给页面
          res.end(content);
          // 退出函数
          return;
        } else {
          console.log("没有找到网页文件");
        }
      }
    }
  });
}

// 服务器初始化
const server = http.createServer(fn);

// 监听本地端口
server.listen(8080);
